// package: rewords-server-2024
// filename: chat_in
// author: diogoxiang@gmail.com
// time: 2025/2/12 09:31

package chat_in

// RequestInp 定义了聊天请求的输入结构体
type RequestInp struct {
	FrequencyPenalty float64        `json:"frequency_penalty"` // 控制生成文本时对重复内容的惩罚程度，值越高越避免重复
	MaxTokens        int64          `json:"max_tokens"`        // 生成文本的最大token数量，限制生成内容的长度
	Messages         []Message      `json:"messages"`          // 聊天消息列表，包含用户和系统的对话内容
	Model            string         `json:"model"`             // 使用的模型名称，指定生成文本的模型
	N                int64          `json:"n"`                 // 生成多少个响应，默认为1
	ResponseFormat   ResponseFormat `json:"response_format"`   // 响应格式，指定生成文本的格式（如JSON）
	Stop             []string       `json:"stop"`              // 停止词列表，生成文本时遇到这些词会停止
	Stream           bool           `json:"stream"`            // 是否以流式方式输出生成的内容
	Temperature      float64        `json:"temperature"`       // 控制生成文本的随机性，值越高越随机，值越低越确定
	TopK             int64          `json:"top_k"`             // 控制采样时的top-k，限制生成文本的候选词数量
	TopP             float64        `json:"top_p"`             // 控制采样时的top-p，限制生成文本的候选词概率总和
}

// ResponseRes 定义了聊天请求的响应结构体
type ResponseRes struct {
	Choices           []Choice `json:"choices"`            // 生成的响应列表，每个响应包含生成的内容和相关信息
	Created           int64    `json:"created"`            // 响应生成的时间戳
	ID                string   `json:"id"`                 // 响应的唯一标识符
	Model             string   `json:"model"`              // 使用的模型名称
	Object            string   `json:"object"`             // 响应对象的类型（如"chat.completion"）
	SystemFingerprint string   `json:"system_fingerprint"` // 系统指纹，用于标识生成响应的系统环境
	Usage             Usage    `json:"usage"`              // 生成响应时的token使用情况
}

// Choice 定义了生成响应的单个选项
type Choice struct {
	FinishReason *string  `json:"finish_reason,omitempty"` // 生成结束的原因（如"stop"表示遇到停止词）
	Index        *int64   `json:"index,omitempty"`         // 响应的索引，用于标识多个响应中的顺序
	Message      *Message `json:"message,omitempty"`       // 生成的消息内容
}

// Usage 定义了生成响应时的token使用情况
type Usage struct {
	CompletionTokens int64 `json:"completion_tokens"` // 生成文本时使用的token数量
	PromptTokens     int64 `json:"prompt_tokens"`     // 输入提示时使用的token数量
	TotalTokens      int64 `json:"total_tokens"`      // 总共使用的token数量
}

// Message 定义了聊天消息的结构体
type Message struct {
	Content string `json:"content,omitempty"` // 消息的内容
	Role    string `json:"role,omitempty"`    // 消息的角色（如"user"表示用户，"assistant"表示助手）
}

// ResponseFormat 定义了响应格式的结构体
type ResponseFormat struct {
	Type string `json:"type"` // 响应格式的类型（如"json_object"）
}
